//package com.shadow.mall.common.dubbo;
//
//import com.shadow.mall.common.constants.CoreConstant;
//import com.shadow.mall.common.utils.MdcUtil;
//import com.shadow.mall.common.utils.SnowFlake;
//import org.apache.dubbo.common.extension.Activate;
//import org.apache.dubbo.rpc.*;
//
///**
// * 自定义dubbo filter
// */
//@Activate(group = {"provider", "consumer"})
//public class TraceIdFilter implements Filter {
//
//    @Override
//    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
//        RpcContext rpcContext = RpcContext.getContext();
//        String traceId;
//        if (rpcContext.isConsumerSide()) {
//            traceId = MdcUtil.getTraceId();
//            if (traceId == null) {
//                traceId = SnowFlake.generateIdStr();
//            }
//            rpcContext.setAttachment(CoreConstant.TRACE_ID, traceId);
//        }
//
//        if (rpcContext.isProviderSide()) {
//            traceId = rpcContext.getAttachment(CoreConstant.TRACE_ID);
//            MdcUtil.setTraceId(traceId);
//        }
//
//        return invoker.invoke(invocation);
//    }
//}